1 职责
读写外部数据
2 V1缺陷
- 与其他API耦合,如SQLContext、RDD和DataFrame等。
- 算子难以下推
- 难以添加不同的数据编码
- 难以实现写操作
- 没有流式场景支持
3 API结构
(1) 读取
Batch
批量查询的数据源扫描表达。用于提供物理信息,如扫描的分区数和从分区读取记录的方式
InputPartition
输入分区的序列化表示。发送到执行器,通过PartitionReader读取。
PartitionReader
用于输出RDD分区数据
PartitionReaderFactory
用于创建PartitionReader实例
Scan
数据源扫描的逻辑表达。用于提供逻辑信息,如实际读取的Schema。
ScanBuilder
用于构建Scan,可混合下推接口。
Statistics
数据源统计
SupportsPushDownFilters
过滤下推,用于减少读取的数据量
SupportsPushDownRequiredColumns
列下推,用于读取制定列,减少读取数据量
SupportsReportPartitioning
报告数据分区,用于避免在Spark侧shuffle
SupportsReportStatistics
提供算子下推后的统计信息,用于提供更精确统计信息给优化器
V1Scan
版本迁移过渡接口
(2) 写入
BatchWrite
批量写操作
DataWriter
负责写单个RDD分区的数据。一个task只有一个。
DataWriterFactory
在执行器侧创建并初始化DataWriter。
LogicalWriteInfo
包含更新WriterBuilder时需要的逻辑信息
PhysicalWriteInfo
更新DataWriterFactory时需要的物理信息
SupportsDynamicOverwrite
支持动态分区覆盖
SupportsOverwrite
支持覆盖
SupportsTruncate
支持清空后写入
V1WriteBuilder
过渡接口
WriteBuilder
构建BatchWrite。默认不影响已有数据,可实现Support接口支持其他方式写操作
WriterCommitMessage
返回给驱动程序的写操作信息